package tmhm.components;

public class BUS extends LogicalComponent {

    private String name;

    public BUS(int in, int out, String name) {
        super(in, out, false);
        this.name = name;
        for (int i = 0; i < out; i++) {
            this.out[i].setIsInt();
        }
    }

    public void func() {
        int numOfInputActive = 0;
        int activeInput = 0;
        for (int i = 0; i < in.length; i++) {
            if ((in[i] != null) && (!in[i].isHighZ())) {
                numOfInputActive++;
                activeInput = i;
            }
        }
        if (numOfInputActive > 1) {
            System.out.println("Warning!!! You burned bus..." + name);
            return;
            
            //iako se nekad ovo desi ne treba ga smatrati kao ozbiljno jer provereno jer
            //da  se desava zato sto nakon klika ne stignu svi signali da se propagiraju i neki ostanu iz prethodnog takta a neki iz tekuceg takta aktivni
            //signali na TSB-ovima ali na kraju takta se sve normalizuje i smanji broj aktivnih ispod 2
        }
        if (numOfInputActive == 0) {
            for (int i = 0; i < out.length; i++) {
                if (out[i] != null) {
                    out[i].clear();
                    out[i].setHighZ(true);
                }
            }
        }
        if (numOfInputActive == 1) {
            for (int i = 0; i < out.length; i++) {
                if (out[i] != null) {
                    //dodato
                    if (out[i].isBool()) {
                        out[i].setBoolVal(in[activeInput].getBoolVal());
                    } else {
                        out[i].setIntVal(in[activeInput].getIntVal());
                    }
                }
            }
        }
    }

    public String getName() {
        return name;
    }
}
